type AppType = { name: string; entry: string; props: Record<string, any> };
type RouteType = {
  path: string;
  microApp: string;
  microAppProps: Record<string, any>;
};
type MasterType = {
  apps: AppType[];
  routes: RouteType[];
};

// 获取子应用列表
const getAppList = () => {
  return Promise.resolve({
    data: [
      {
        appName: "app1", // 子应用package中的name，需保持唯一
        baseUrl: "/app1",
        entry: "/childApps/app1", // 生产环境：子应用静态资源入口
      },
      {
        appName: "app2",
        baseUrl: "/app2",
        entry: "/childApps/app2",
      },
    ],
  });
};

// 子应用注册方法
export const qiankunRender = async () => {
  const master: MasterType = {
    apps: [],
    routes: [],
  };
  try {
    const res = await getAppList();
    res.data.forEach((item) => {
      // 生产环境
      if (process.env.NODE_ENV === "production") {
        master.apps.push({
          name: item.appName,
          entry: item.entry,
          props: {}, // 这种为通过配置的方式向子应用传递props，更加推荐使用useModel的方式
        });
      } else {
        // 本地环境【修改entry可以在本地进行主子应用联调】
        if (item.appName === "app1") {
          master.apps.push({
            name: item.appName,
            entry: "http://localhost:8001",
            props: {},
          });
        } else {
          master.apps.push({
            name: item.appName,
            entry: "http://localhost:8002",
            props: {},
          });
        }
      }
      // 注册路由
      master.routes.push({
        path: item.baseUrl,
        microApp: item.appName,
        microAppProps: {
          // 应用级加载动画
          autoSetLoading: true,
          loader: (loading: boolean) => {
            // return <PageLoading loading={loading}></PageLoading>
          }
        },
      });
    });
    return master;
  } catch (error) {
    console.warn(error);
    return master;
  }
};
